package com.shiminghui;

public class ChengFa {
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     * @param s string字符串 第一个整数
     * @param t string字符串 第二个整数
     * @return string字符串
     */

    public static String daShuJiaFa(String s, String t) {
        // write code here
        int slength = s.length();
        int tlength = t.length();
        int max, min;
        if (slength > tlength) {
            min = tlength;
            max = slength;
        } else {
            max = tlength;
            min = slength;
        }
        int arr[] = new int[max + 1];
        int i = 0, jin = 0;
        while (max != 0 || min != 0) {
            if (slength > tlength) {
                if (min == 0) {
                    arr[i] = (s.charAt(max - 1) + jin - 48) % 10;
                    jin = (s.charAt(max - 1) + jin - 48) / 10;
                    max--;
                } else {
                    arr[i] = (s.charAt(max - 1) + t.charAt(min - 1) + jin - 96) % 10;
                    jin = (s.charAt(max - 1) + t.charAt(min - 1) + jin - 96) / 10;
                    max--;
                    min--;
                }
            } else {
                if (min == 0) {
                    arr[i] = (t.charAt(max - 1) + jin - 48) % 10;
                    jin = (t.charAt(max - 1) + jin - 48) / 10;
                    max--;
                } else {
                    arr[i] = (s.charAt(min - 1) + t.charAt(max - 1) + jin - 96) % 10;
                    jin = (s.charAt(min - 1) + t.charAt(max - 1) + jin - 96) / 10;
                    max--;
                    min--;
                }
            }
            i++;
        }

        if (jin == 1) {
            arr[arr.length - 1] = 1;
        }


        StringBuffer result = new StringBuffer();
        for (int i1 = arr.length - 1; i1 >= 0; i1--) {
            System.out.print(arr[i1] + "\t");
            if (arr[i1] == 0 && i1 == arr.length - 1) {
                continue;
            }
            result.append(arr[i1]);

        }

        return result.toString();
    }

    public static String getzore(int index) {
        StringBuffer str = new StringBuffer();
        for (int i = 0; i < index; i++) {
            str.append(0);
        }
        return str.toString();
    }

    //(((int) s.charAt(i)-48) * Math.pow(10, s.length() - i - 1) * ((int) t.charAt(j)-48) * Math.pow(10,  s.length() - j - 1))
    public static String solve(String s, String t) {
        // write code here
        String sum = "";
        for (int i = s.length() - 1; i >= 0; i--) {
            for (int j = t.length() - 1; j >= 0; j--) {
                int zhi = (s.charAt(i)-48)*(t.charAt(j)-48);
                sum = daShuJiaFa(sum,zhi==0? "0": zhi+getzore( s.length()+t.length()-i-j-2));
            }
        }

        return sum;

    }


        /**
         * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
         *
         * @param s string字符串 第一个整数
         * @param t string字符串 第二个整数
         * @return string字符串
         */
        public static String solveLao (String s, String t) {
            // write code here
            // 判断不合法的输入
            if (s == null || s.length() == 0 || t == null || t.length() == 0) {
                return null;
            }
            // 如果有一个字符串为 0 ，结果就是 0
            if ("0".equals(s) || "0".equals(t)) {
                return "0";
            }

            // 最后相乘的结果，长度最多就是 2 个字符串的长度相加
            int[] num = new int[s.length() + t.length()];

            // num1 的每一个数字， 和 num2 的每一个数字相乘；  放到 num 数组的对应位置上
            for (int i = s.length() - 1; i >= 0; i--) {
                for (int j = t.length() - 1; j >= 0; j--) {
                    // 同一个位置可能有多种情况映射过来， 所以结果位置上的结果取个累加和即可
                    num[i + j + 1] += (s.charAt(i) - '0') * (t.charAt(j) - '0');
                }
            }
            // 如果最后的结果有进位，那么 num 数组的第一位数不为零；
            // 如果没进位，则为零。这种情况需要注意不要这个零。
            int end = 1;
            StringBuilder res = new StringBuilder();
            // 保存进位的值
            int carry = 0;
            // 从后往前遍历 num 数组，最后的结果有进位则遍历到 0 结束，没进位就遍历到 1 结束。
            for (int i = num.length - 1; i >= end; i--) {
                // 数组上对应位置的数 和 进位相加的结果
                int temp = num[i] + carry;
                res.append(temp % 10);
                carry = temp / 10;
            }
            // 最后的进位不为零，也是计算的结果，往前进 carry 位即可。
            if (carry != 0) {
                res.append(carry);
            }

            // 根据上述的流程，把 res 倒序一下，就是最后 2 个字符串相乘的结果
            return res.reverse().toString();
        }



    public static void main(String[] args) {
        String s = "999999999999999999999999999999999999";
        String t = "9";
        System.out.println(solveLao(s, t));
    }
}
